package com.shop.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.shop.dao.ProductDao;
import com.shop.entity.Product;
import com.shop.entity.Result;
import com.shop.enums.ProductStatuEnum;
import com.shop.service.ProductService;
import com.shop.util.ResultUtil;
import com.shop.util.UUIDUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * description: 该文件说明
 *
 * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
 * @version 1.0
 * @date 2018/10/11 16:02
 **/
@Service
public class ProductServiceImp implements ProductService {

    @Resource
    private ProductDao productDao;
    /**
     * description:<分页查找商品>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/11 16:02
     * @param  
     * @return 
     **/
    @Override
    public PageInfo<Product> findProductList(Integer page, Integer rows, Product product) {
        PageHelper.startPage(page,rows);
        List<Product> list = productDao.findProdect(product);
        return new PageInfo<Product>(list);
    }

    /**
     * description:<商品添加>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/12 9:21
     * @param  
     * @return 
     **/
    @Override
    public Result addProduct(Product product) {
        //1.校验数据
        Result result = checkProductDate( product);
        if(ResultUtil.ERROR == result.getCode()){
            return result;
        }
        //2.设置主键
        product.setProductId(UUIDUtil.uuid());
        try {
            productDao.addProduct(product);
        } catch (Exception e) {
            return ResultUtil.error("添加商品失败，请检查是否数据错误");
        }
        return ResultUtil.success("添加商品成功");
    }

    /**
     * description:<商品修改>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/12 10:45
     * @param  
     * @return 
     **/
    @Override
    public Result modifyProduct(Product product) {
        //1.数据校验
        Result result = checkProductDate( product);
        if(ResultUtil.ERROR == result.getCode()){
              return result;
        }
        //2.更新数据
        try {
            productDao.updateProduct(product);
        } catch (Exception e) {
            return ResultUtil.error("更新商品失败，请检查是否数据错误");
        }
        return  ResultUtil.success("更新商品成功");
    }

    /**
     * description:<商品状态更新>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/12 15:28
     * @param  
     * @return 
     **/
    @Override
    public Result updateProductStatu(String productId) {
        //1.数据校验
        if(StringUtils.isEmpty(productId)){
            return ResultUtil.error("商品id不能为空");
        }
        //2.通过id查找是否有相关的商品
        try {
            Product product = productDao.findProductOne(productId);
            if(null == product){
               return ResultUtil.error("找不到相关商品，更新失败");
            }
            //如果是下架就修改为上架，如果是上架就修改为下架
            if(ProductStatuEnum.PRODUCT_OBTAIN.equals(product.getProductStatus())){
                product.setProductStatus(ProductStatuEnum.PRODUCT_SHELF.getCode());
            }else {
                product.setProductStatus(ProductStatuEnum.PRODUCT_OBTAIN.getCode());
            }
            productDao.updateProductStatu(product);
        } catch (Exception e) {
            return ResultUtil.error("更新失败，请检查是否数据错误");
        }
        return ResultUtil.success("更新商品成功");
    }

    /**
     * description:<通过类目id查找商品>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/17 15:53
     * @param  
     * @return 
     **/
    @Override
    public PageInfo<Product> findProductByCategoryType(Integer page,Integer row,Product product) {
        PageHelper.startPage(page,row);
        List<Product> list = null;
        try {
            list = productDao.findProcutByCategoryType(product);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new PageInfo<Product>(list);
    }

    /**
     * description:<通过商品id查找商品详情>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/17 17:05
     * @param  
     * @return 
     **/
    @Override
    public Product findProductByProductId(String productId) {
        Product product =  productDao.findProductOne(productId);
        return product;
    }

    /**
     * description:<商品实体的校验>
     *
     * @author zhaoxiaozhao（xiaozhao.zhao@ucarinc.com）
     * @date   2018/10/12 9:23
     * @param  
     * @return 
     **/
    private Result checkProductDate(Product product){
        if(StringUtils.isEmpty(product.getProductName())){
            return ResultUtil.error("商品名称不能为空");
        }
        if(StringUtils.isEmpty(product.getProductPrice())){
            return ResultUtil.error("商品价格不能为空");
        }
        if(StringUtils.isEmpty(product.getProductStock())){
            return ResultUtil.error("商品库存不能为空");
        }
        if(StringUtils.isEmpty(product.getProductDescription())){
            return ResultUtil.error("商品描述不能为空");
        }
        Integer categoryType = product.getCategoryType();
        if(StringUtils.isEmpty(categoryType) || new Integer(-1).equals(categoryType)){
            return ResultUtil.error("请选择类目编号");
        }
        return ResultUtil.success();
    }
}
